package Interfaces;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.List;
import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import lemar.ConexionHibernate;
import lemar.entidad.Proveedor;
import lemar.entidad.Usuario;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
//import org.apache.commons.codec.digest.DigestUtils;

public class AgregarUsuario extends javax.swing.JPanel {
    //Atributos para el uso de Hibernate

    private static SessionFactory sessionFactory = null;
    private int lim1 = 8;
    private int limNombreUsuario = 15;
    //private ComboBoxModel Rol;

    public AgregarUsuario() {
        initComponents();
        //cargarComboBox();
//DefaultComboBoxModel Rol = new DefaultComboBoxModel();
        //cargarComboBox();
        txtNombreUsuario.addKeyListener(new KeyListener() {
            public void keyTyped(KeyEvent e) {
                if (txtNombreUsuario.getText().length() == limNombreUsuario) {
                    e.consume();
                }
            }

            public void keyPressed(KeyEvent arg0) {
            }

            public void keyReleased(KeyEvent arg0) {
            }
        });

        txtContraseña.addKeyListener(new KeyListener() {
            public void keyTyped(KeyEvent e) {
                if (txtContraseña.getText().length() == lim1) {
                    e.consume();
                }
            }

            public void keyPressed(KeyEvent arg0) {
            }

            public void keyReleased(KeyEvent arg0) {
            }
        });

        txtConfirmarContraseña.addKeyListener(new KeyListener() {
            public void keyTyped(KeyEvent e) {
                if (txtConfirmarContraseña.getText().length() == lim1) {
                    e.consume();
                }
            }

            public void keyPressed(KeyEvent arg0) {
            }

            public void keyReleased(KeyEvent arg0) {
            }
        });
//Agregando mensajes de ayuda para el llenado de los campos

        txtNombreUsuario.setToolTipText("Ingrese el nombre del Usuario");
        txtContraseña.setText("");
        txtContraseña.setToolTipText("Ingrese la Contraseña del Usuario");
        txtConfirmarContraseña.setText("");
        txtConfirmarContraseña.setToolTipText("Ingrese de nuevo la Contraseña");
        cmbTipoUsuario.setToolTipText("Seleccione TipoUsuario");

    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        txtNombreUsuario = new javax.swing.JTextField();
        jLabel3 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        jLabel5 = new javax.swing.JLabel();
        btnAgregarUsuario = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        txtContraseña = new javax.swing.JPasswordField();
        cmbTipoUsuario = new javax.swing.JComboBox();
        jLabel2 = new javax.swing.JLabel();
        txtConfirmarContraseña = new javax.swing.JPasswordField();

        setBackground(new java.awt.Color(255, 255, 255));
        setToolTipText("");
        setMaximumSize(new java.awt.Dimension(747, 435));
        setMinimumSize(new java.awt.Dimension(747, 435));
        setPreferredSize(new java.awt.Dimension(747, 435));

        jLabel1.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
        jLabel1.setText("Agregar Nuevo Usuario Al Sistema");

        txtNombreUsuario.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                txtNombreUsuarioKeyTyped(evt);
            }
        });

        jLabel3.setText("Nombre De Usuario");

        jLabel4.setText("Contraseña");

        jLabel5.setText("Rol");

        btnAgregarUsuario.setText("Ingresar");
        btnAgregarUsuario.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnAgregarUsuarioActionPerformed(evt);
            }
        });

        jButton2.setText("Cancelar");
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnCancelarUsuarioActionPerformed(evt);
            }
        });

        txtContraseña.setText("ContraseñaUsuario");

        cmbTipoUsuario.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Administrador", "Gerente de Ventas", "Encargado de Bodega", "Vendedor", "Cajero" }));

        jLabel2.setText("Confirmar Contraseña");

        txtConfirmarContraseña.setText("ConfirmarContraseña");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(164, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addComponent(jButton2)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(btnAgregarUsuario)
                        .addContainerGap())
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addComponent(jLabel3)
                        .addGap(18, 18, 18)
                        .addComponent(txtNombreUsuario, javax.swing.GroupLayout.PREFERRED_SIZE, 220, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(239, 239, 239))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addComponent(jLabel1)
                        .addGap(224, 224, 224))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(jLabel4)
                            .addComponent(jLabel5)
                            .addComponent(jLabel2))
                        .addGap(18, 18, 18)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(txtContraseña, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 220, Short.MAX_VALUE)
                            .addComponent(cmbTipoUsuario, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(txtConfirmarContraseña))
                        .addGap(239, 239, 239))))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(123, 123, 123)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jLabel1)
                        .addGap(46, 46, 46)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(txtNombreUsuario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabel3))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jLabel4)
                            .addComponent(txtContraseña, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(17, 17, 17)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jLabel2)
                            .addComponent(txtConfirmarContraseña, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(41, 41, 41))
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(cmbTipoUsuario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(jLabel5)))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 81, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btnAgregarUsuario)
                    .addComponent(jButton2))
                .addContainerGap())
        );
    }// </editor-fold>//GEN-END:initComponents

    private void txtNombreUsuarioKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtNombreUsuarioKeyTyped
        //SOLO LETRAS
        char c;

        c = evt.getKeyChar();
        if (!(c < '0' || c > '9')) //if((car<'a' || car>'z') && (car<'A' || car>'Z')) evt.consume();
        {
            evt.consume();
        }
    }//GEN-LAST:event_txtNombreUsuarioKeyTyped

    private void btnAgregarUsuarioActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAgregarUsuarioActionPerformed

        //Variables que contendran los valores de los campos de texto
        String nombreUsuario = "";
        String contraseña = "";
        String confirmarcontraseña = "";
        String tipoUsuario = "";
        
        //Variable que maneja la respuesta del JOptionPane
        int conf;

        //Extrayendo la informacion de los campos de texto
        nombreUsuario = txtNombreUsuario.getText();
        contraseña = txtContraseña.getText();
        confirmarcontraseña = txtConfirmarContraseña.getText();
        tipoUsuario = cmbTipoUsuario.getSelectedItem().toString();
        //contraseñaencriptada=DigestUtils.md5Hex(contraseña);

        //Validaciones
        if (!(nombreUsuario.isEmpty() || contraseña.isEmpty() || confirmarcontraseña.isEmpty() || tipoUsuario.isEmpty())) { //Si no esta vacio algun campo           

            //Chunche de Hibernate (Inicio de sesion de hibernate)
            Session session = null;
            try {
                try {
                    //Conexion a la BD
                    sessionFactory = ConexionHibernate.getSessionFactory();
                    //Apertura de la sesion
                    session = sessionFactory.openSession();
                    Transaction tx = session.beginTransaction();
                    //Creando el objeto  Usuario 

                    Usuario usuario = new Usuario();
                    //Ingresando la informacion del usuario al bjeto usuario

                    usuario.setNombreUsuario(nombreUsuario);
                    usuario.setPassword(contraseña);
                    usuario.setTipoUsuario(tipoUsuario);
                    if (confirmarcontraseña.equals(contraseña)) {
                        //Mensaje de pregunta si quiere guardar los datos proporcionados 
                        conf = JOptionPane.showConfirmDialog(null, "¿Esta seguro de ingresar esos datos?", "Confirmación", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);

                        if (conf == JOptionPane.YES_OPTION) {//Si la opcion fue SI
                            //Guardando el objeto en la base de datos
                            session.save(usuario);
                            tx.commit();
                            txtNombreUsuario.setText("");
                            txtContraseña.setText("");
                            txtConfirmarContraseña.setText("");
                            //Mensaje de confirmacion de insercion Exitosa
                            JOptionPane.showMessageDialog(null, "Registro guardado exitosamente", "Información", JOptionPane.INFORMATION_MESSAGE);
                        }
                    } else {
                        JOptionPane.showMessageDialog(null, "Error, Contraseñas no coinciden, escriba nuevamente la contraseña ", "Error en los datos", JOptionPane.ERROR_MESSAGE);
                        txtContraseña.setText("");
                        txtConfirmarContraseña.setText("");
                    }
                } catch (Exception e) {
                    System.out.println(e.getMessage());
                }
            } finally {
                //Finalizacion de la sesion de hibernate
                session.close();

            }
        } else {
            JOptionPane.showMessageDialog(null, "Error, no pueden haber campos vacios ", "Error en los datos", JOptionPane.ERROR_MESSAGE);


        }
      
         
    }//GEN-LAST:event_btnAgregarUsuarioActionPerformed
    private void btnCancelarUsuarioActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCancelarUsuarioActionPerformed
        //Se borran los datos de los campos de texto
        txtNombreUsuario.setText("");
        txtContraseña.setText("");
        txtConfirmarContraseña.setText("");
        //txtTipoUsuario.setText("");
    }//GEN-LAST:event_btnCancelarUsuarioActionPerformed
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnAgregarUsuario;
    private javax.swing.JComboBox cmbTipoUsuario;
    private javax.swing.JButton jButton2;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JPasswordField txtConfirmarContraseña;
    private javax.swing.JPasswordField txtContraseña;
    private javax.swing.JTextField txtNombreUsuario;
    // End of variables declaration//GEN-END:variables
}

